============= KID CHAMELEON HACKING INFO 12/20/2007 ============= RESEARCHED & DOCUMENTED BY DAMIAN GROVE / SAXMAN (ymtx81z AT yahoo DOT com) UPDATED: 09/25/2008 Portions of this documentation were used to create K-E. I am more than happy to be sharing this information with the online ROM hacking scene. And perhaps other tools could emerge as a result of these notes being made public! All I ask is that you give credit where it's due. ::::ROM:::: 011962 - Addresses to game's main functions 012DD0 - Sega logo 01AE48 - Intro 019AA8 - Level title card 011A0E - Level 011996 - Demo 01CA06 - Options 01AF98 - Intro screen #2 01AE6E - Intro screen #3 01B062 - Intro screen #4 01B0A8 - Intro screen #5 01B160 - Intro transition into title 01B242 - Title 01AE51 - Music for intro 01201E - Music playlist for level styles 00 - MUS Mountain 01 - MUS Egypt 02 - MUS Castle 03 - MUS Ice / THEME 04 - MUS Ruins 05 - MUS ENDING 06 - MUS Woods 07 - MUS Cave 08 - MUS Beach 09 - MUS CHASE 0A - MUS Swamp 0B - SND? 0C - SND counter 0D - SND smash? 0E - SND clock 0F - NOTHING 10 - SND mechanical chop with high pitch screech 11 - SND smash 12 - SND metal 13 - SND? 14 - SND block deleted 15 - SND hit skyscraper 16 - SND? 17 - SND jump 18 - SND unused jingle 19 - SND alien hovering 1A - SND iron knight jingle 1B - SND maniaxe jingle 1C - SND? 1D - SND? 1E - SND? 1F - SND? 20 - SND? 21 - SND unused jingle (alternate version of 18) 22 - SND? 23 - SND? 24 - SND? 25 - SND? 26 - SND? 27 - SND? 28 - SND 20 diamonds 29 - SND extra life 2A - SND replenish health 2B - SND? 2C - SND extra continue 2D - SND diamond 2E - SND red stealth jingle 2F - SND berzerker jingle 30 - SND skycutter jingle 31 - SND eyeclops jingle 32 - SND cyclone jingle 33 - SND micromax jingle 34 - SND juggernaut jingle 35 - SND eyeclops gun 36 - SND? 3C - SND mechanical chop 47 - NOTHING 4F - MUS Swamp (alternate version... unused?) 56 - SND bounce 5C - VOC grunt 60 - VOC "Die" chorus 61 - VOC "Ouch" 62 - VOC "Diamond" 64 - VOC grunt (Kid Chameleon) 65 - MUS City / OPTIONS 68 - VOC "Bummer" 6B - VOC "Ouch" (original recording) 6C - VOC "Ouch" (slowed down) 6D - VOC "Ouch" (slowed down even more) 6E - NOTHING 6F - NOTHING 70 - NOTHING 71 - NOTHING 72 - NOTHING 73 - NOTHING 74 - MUS END LEVEL 75 - NOTHING 76 - SND warp 77 - SND storm 78 - buggy 79 - NOTHING 7A - buggy 7B - buggy 7C - buggy 7D - buggy / disables sound 7E - buggy 7F - buggy 007EC2 - Hit points at character init for each character 00BDB6 - Hit points cap for each character 00A49E - Jump height for each character (words) 00A4B2 - Acceleration rate during a jump (words) 00A4C6 - Max speed during a jump (longs) 009C0A - Max walking speed (long) 009C0E - Acceleration walking rate (long) 009C12 - Deceleration walking/running rate (long) 009C26 - Brake walking-left rate (long) 009C2A - Max running speed (long) 009C2E - Acceleration running rate (long) 009C32 - Brake walking-right/running rate (long) 01A45C - Title card text 01A802 - Title card text placement positions 01A842 - Title cards to use for each level (text; placement; number) 01AB4D - Starting level number from which all levels there-on are called "Elsewhere" 00D8E9 - Path bonus for each level (value multiplied by 1000) 00D934 - Speed bonus times for each level (by level number) 00B473 - Warp cheat level (sets to The Final Marathon) 00C01D - Level's flag not present until boss killed (Shiskaboss) 00C025 - Level's flag not present until boss killed (Boomerang Bosses) 00C02D - Level's flag not present until boss killed (Bagel Brothers) 00C035 - Level's flag not present until boss killed (Plethora) 00D809 - Last level (Plethora) 00DA69 - Secret 100,000 pt level warp destination (Under Skull Mountain I) 010ACF - Secret 100,000 pt level warp source (Woods of Despair I) 04033B - Starting level (Blue Lake Woods I) 04033E - 32-bit address to level order list 040342 - Pointers to level headers for each map number (from 04033B) 04043E - Level order list (assigns maps to each level number) Clarification: - MAP number is a number assigned to the actual map - LEVEL number is a number assigned by the level order list PALETTES ARE NOT COMPRESSED ART IS COMPRESSED MAPPINGS ARE NOT COMPRESSED COLLISIONS ARE NOT COMPRESSED 00CAB2 - Art for end-level digital tiles 0992E4 - Art for blocks 07B054 - Address list for palettes for each level style 00-0A (~FRONT) -- pal 1, 15 colors 07B080 - Address list for palettes for each level style 00-0A (~BACKGROUND) -- pal 2, 16 colors 07B104 - Address list for art for each level style 00-0A (FRONT) [pointed from 07B018] 07B130 - Address list for art for each level style 00-0A (BACKGROUND) [pointed from 07B01C] 07B168 - Address list for mappings for each level style 00-0A (FRONT) [pointed from 07B020] 07B1C0 - Address list for collisions for each level style 00-0A [pointed from 07B030] 0902C2 - Start of WOODS art (front) 096514 - Start of WOODS art (background) 07FE94 - Start of WOODS mappings (front) Level header info (starts at 0404AA) (start level header) 040816 - Level X size (320 pixels per unit) 040817 - Level Y size (224 pixels per unit) 040818 - Level style (AX) 040819 - Level background style (BX) 04081A - Player object (XXXX YYYY) 04081E - Flag object (XXXX YYYY) 040822 - 32-bit address for tile layout (play area) 040826 - 32-bit address for block layout 04082A - 32-bit address for tile layout (background) 04082E - 32-bit address for enemy layout (end level header, start next level header...) Maximum level size is 30 screens A Flags: 8 = chase level B Flags: 1 = lava shoots up 2 = stormy level 3 = stormy level with hail BLWI address1 = 00 05 61 D2 BLWI address2 = 00 07 3A F6 BLWI address3 = 00 06 FB 56 BLWI address4 = 00 07 92 E8 Level styles: 00 - FREEZE 01 - Castle 02 - Ice 03 - Ruins 04 - Island 05 - Egypt 06 - Swamp 07 - Mountain 08 - Cave 09 - Woods 0A - City PALETTE FORMAT 1 color = (bytes) xB GR 1 color = (bits) xxxxBBBx GGGxRRRx palette 1 colors = 1 2 3 4 5 6 7 8 9 A B C D E F palette 2 colors = 0 8 9 B C D E F 01445A - Color conversion map (used when storing art in VRAM) -- BLW MAPPINGS FORMAT 1 sprite = (bits) lppfmsss ssssssss s - sprite (0x0 - 0x7FF) m - mirror (0=no, 1=yes) f - flip (0=no, 1=yes) p - palette (0-3) l - layer (0=low, 1=high) sprites for each block are listed in this order: \\\\\\////// \1111\/2222/ \1111\/2222/ \\\\\\////// //////\\\\\\ /3333/\4444\ /3333/\4444\ //////\\\\\\ TILE LAYOUT 16-bits - relative position pointer to input data (following this pointer is process data) Process data tells the game what to do with the input data (process data format in bits) 1 - direct copy 00:A - short reference 01:BBB:AA - long reference --1 FORMAT-- TILE = INPUT_BYTE --00 FORMAT-- TILES = COPY A+2 TILES from POSITION - INPUT_BYTE --01 FORMAT-- If AA is less than 11 TILES = COPY AA+3 TILES from POSITION - INPUT_BYTE - (BBB * 256) If AA is equal to 11 TILES = COPY INPUT_BYTE2 TILES from POSITION - INPUT_BYTE1 - (BBB * 256) BLOCK LAYOUT (Layout header) AA - ?? this is 40 in every single map in the game xy - x is number of bits for X pos, y is number of bits for Y pos (List header) 1-bit - is block hidden? (0=no, 1=yes) 5-bits - block type (Data) Format for block data depends on block type BLOCK TYPE: 0 - rock block (X) 1 - prize block (P) 2 - ice block (X) 3 - ghost block (G) 4 - telepad (T) 5 - iron block (X) 6 - rubber block (X) -- data has 01233C for format 7 - shifting block (X) 8 - WEIRD... -- data has 0125A6 for format (same as X, but 32x32) 9 - mushroom block (X) A - cannon/vanishing block (D) -- data has 0126BA for format B - lift (R) -- data has 0125A6 for format C - drill block (D) -- data has 000000 for format D - -- data has 000000 for format FREEZES E - -- data has 000000 for format FREEZES F - -- data has 0126F2 for format FREEZES 10 - Collision Mod (M) --- make X position bits all 1 to end list and start a new list --- --- make block layout header bits all 1 to end block layout --- (P format - 5+xy+5b) x-bits - X position y-bits - Y position 4-bits - number of prize blocks (uses extra bits for each block) 1-bit - direction (0=row, 1=column) (for each prize block) 1-bit - disguise as rock block? (0=no, 1=yes) 4-bits - prize (repeat) (T format - 25+xy bits) x-bits - X position y-bits - Y position 8-bits - map to warp to 8-bits - Y position to warp to (per 16 pixels) 9-bits - X position to warp to (per 16 pixels) (repeat) (G format - 31+xy bits) x-bits - X position y-bits - Y position 3-bits - num of blocks 1-bit - direction (0=row, 1=column) 8-bits - delay time to start animation (00 will freeze it) 11-bits - hold time before disappearing 8-bits - hold time before reappearing (repeat) (D format - 5+xy+4b) x-bits - X position y-bits - Y position 4-bits - num of blocks 1-bit - direction (0=row, 1=column) (for each digital block) 1-bit - up spike/drill 1-bit - right spike/drill 1-bit - down spike/drill 1-bit - left spike/drill (repeat) (R format - xy bits) x-bits - X position y-bits - Y position (repeat) (X format - 4+xy bits) x-bits - X position (per block unit) y-bits - Y position (per block unit) 4-bits - num of blocks (1-16) 1-bit - direction (0=row, 1=column) (repeat) (M format) x-bits y-bits 4-bits 1-bit (for each) 3-bits - 0=passthru, 1=downhill, 2=uphill, 3=barrier, 4=uphill&tile, 5=downhill, 6=passthru, 7=passthru (repeat) 012274 - 32-bit address list for block formats PRIZES: 0 - Diamond 1 - 10000 points 2 - Helmet (skycutter) 3 - Helmet (cyclone) 4 - Helmet (red stealth) 5 - Helmet (eyeclops) 6 - Helmet (juggernaut) 7 - Helmet (iron knight) 8 - Helmet (berzerker) 9 - Helmet (maniaxe) A - Helmet (micromax) B - 1-up C - Time D - Continue E - 10 diamonds F - Same as 0 ENEMY LAYOUT: (header) HA - 32-bit address pointing to 'H1' 00000000? FFFF? 000C? FFFF? 7D00? H1 - ? H2 - Number of objects in level (data) AA - Object BB - Flags (00 to respawn DRAGON after death, FF to make DRAGON kill permanent) CCDD - Hit points + 1 (0000 - 7FFE) EEFF - X position GGHH - Y position 00 - Walking fire guy 01 - Enemy diamond 02 - FREEZES 03 - Alien robot 04 - ? He charges at you 05 - Oil monster 06 - NOTHING 07 - Cupid 08 - ? He charges at you jumping in air 09 - ? He walks towards you when you're looking the other way 0A - Robot skull 0B - Robot skull (shoots) 0C - Flying dragon 0D - Walking dragon 0E - Stormy cloud 0F - Alien 10 - Bull-type guy thing 11 - ? Slow walking, can jump in the air 12 - Lion 13 - ? Fast moving 14 15 16 17 18 19 - Bouncing flame 1A 1B 1C 1D 1E - FREEZES 1F - FREEZES 20 - Heady Metal (final boss) 21 - NOTHING 22 - Shiskaboss (all three heads 23 - Boomerang bosses (all three heads) 24 - Bagel Brothers (one head) 25 and up will simply FREEZE the game ::::SAVESTATE:::: 0048C0 - Object layout (each object takes 4C bytes) XXXX 0000 YYYY 0000 AABB XXXX - X position YYYY - Y position AA - Object BB - Type 00 (50) - Kid Chameleon 05 (74) - Dragon 11 (2C) - Flag exit pole (active) 11 (40) - Waving flag 12 - End stage 011C94 - X camera position 011C98 - Y camera position 0074B2 - Mappings for blocks 003218 - intersting block behavior SAVESTATE 00DD8A Level design stuff (LEVEL BEGINS AT 00CACA) XXYY XX - Block YY - Skin BLUE LAKE WOODS has 200 blocks X 40 Down-hill platform 50 Up-hill platform 60 Flat platform 70 Painful platform CC Drill block (acts differently depending on skin used) CF Up-hill platform D0 Down-hill platform D1 Down-hill platform D2 Down-hill platform D3 Down-hill platform D4 Down-hill platform D5 Down-hill platform D6 Down-hill platform D7 Down-hill platform D8 Down-hill platform D9 Down-hill platform DA Spike shooter block (acts differently depending on skin used) DB Down-hill platform DC Drill block (acts differently depending on skin used) DD Down-hill platform DE Down-hill platform DF Down-hill platform E0 Smash block E1 Power block E2 Ice block E3 Solid block E4 Teleporter block E5 Metal block E6 Bounce block E7 Skyscraper block